import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let checkBoxItems = [
    {
        "label": "CheckBox_Create",
        "insertText": dedent`
        GUI:CheckBox_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:nimg}, \${6:pimg})
        `,
        "documentation": dedent`# 创建复选框
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型   | 注释         |
        | :----- | :--- | :----- | :----------- |
        | parent | 是   | obj    | 父节点对象   |
        | ID     | 是   | string | 唯一ID       |
        | x      | 是   | int    | 位置 横坐标  |
        | y      | 是   | int    | 位置 纵坐标  |
        | nimg   | 是   | string | 正常图片路径 |
        | pimg   | 是   | string | 选中图片路径 |

        - 示例代码

        \`\`\`
        local nimg = "res/private/gui_edit/CheckBox_Normal.png"
        local pimg = "res/private/gui_edit/CheckBox_Press.png"
        local checkBox = GUI:CheckBox_Create(parent, "checkBox", 0, 0, nimg, pimg)
        \`\`\`
        `
    },
    {
        "label": "CheckBox_loadTextureBackGround",
        "insertText": dedent`
        GUI:CheckBox_loadTextureBackGround(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置复选框背景图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型   | 注释             |
        | :----- | :--- | :----- | :--------------- |
        | widget | 是   | obj    | 复选框对象       |
        | value  | 是   | string | 默认状态图片路径 |

        `
    },
    {
        "label": "CheckBox_loadTextureFrontCross",
        "insertText": dedent`
        GUI:CheckBox_loadTextureFrontCross(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置复选框前景图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型   | 注释             |
        | :----- | :--- | :----- | :--------------- |
        | widget | 是   | obj    | 复选框对象       |
        | value  | 是   | string | 选中状态图片路径 |

        `
    },
    {
        "label": "CheckBox_loadTextureFrontCrossDisabled",
        "insertText": dedent`
        GUI:CheckBox_loadTextureFrontCrossDisabled(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置复选框禁用前景图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型   | 注释             |
        | :----- | :--- | :----- | :--------------- |
        | widget | 是   | obj    | 复选框对象       |
        | value  | 是   | string | 禁用状态图片路径 |

        `
    },
    {
        "label": "CheckBox_setSelected",
        "insertText": dedent`
        GUI:CheckBox_setSelected(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置复选框选中或取消
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 复选框对象 |
        | value  | 是   | bool | 选中或取消 |

        `
    },
    {
        "label": "CheckBox_isSelected",
        "insertText": dedent`
        GUI:CheckBox_isSelected(\${1:widget})
        `,
        "documentation": dedent`# 获取复选框是否选中
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数   | 必选 | 类型 | 注释       |
        | :----- | :--- | :--- | :--------- |
        | widget | 是   | obj  | 复选框对象 |

        `
    },
    {
        "label": "CheckBox_addOnEvent",
        "insertText": dedent`
        GUI:CheckBox_addOnEvent(\${1:widget}, \${2:eventCB})
        `,
        "documentation": dedent`# 设置复选框监听事件
        [在线文档](http://engine-doc.996m2.com/web/#/22/2168)

        | 参数    | 必选 | 类型     | 注释       |
        | :------ | :--- | :------- | :--------- |
        | widget  | 是   | obj      | 复选框对象 |
        | eventCB | 是   | function | 事件函数   |

        `
    }
]




export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    checkBoxItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
